<?php
/**
 * Created by PhpStorm.
 * User: xiangpeng
 * Date: 2016/12/28
 * Time: 0:29
 */

namespace Admin\Controller;


use Common\Controller\AdminController;
use Common\Model\BrandModel;
use Common\Model\CategoryModel;
use Common\Model\DetailModel;
use Common\Model\GoodsAttrModel;
use Common\Model\GoodsModel;
use Common\Model\TypeAttrModel;
use Org\Util\Data;

class GoodsController extends  AdminController
{
    //2.商品列表方法
    public function goodsLists(){
        $Goods = M( 'Goods' ); // 实例化User对象
        $count = $Goods->count();// 查询满足要求的总记录数
        $Page  = new \Think\Page( $count , 7 );// 实例化分页类 传入总记录数和每页显示的记录数(25)、
        //分页样式定制
        $Page->setConfig( 'header' , "<span class='headerPage'>共 %TOTAL_ROW% 条商品记录</span>" );
        $Page->setConfig( 'prev' , '上一页' );
        $Page->setConfig( 'next' , '下一页' );
        $Page->setConfig( 'theme' , '%HEADER% %FIRST% %UP_PAGE% %LINK_PAGE% %DOWN_PAGE% %END%' );
        //分页样式定制结束
        //dd($Page);
        $show = $Page->show();// 分页显示输出
        // 进行分页数据查询 注意limit方法的参数要使用Page类的属性
        $list = $Goods->order( 'time desc,gid' )->limit( $Page->firstRow . ',' . $Page->listRows )->select();
        $this->assign( 'list' , $list );// 赋值数据集
        $this->assign( 'page' , $show );// 赋值分页输出
        //加载模板
        $this->display();
    }

    //1.商品添加
    public function add(){

        if(IS_POST){ //判断是否是post提交
            //实例化模型
           //dd($_POST);die;
            $goodsModel= new GoodsModel();
            //执行自动验证
            $res=$goodsModel->store();
            if($res['status']=='success'){
                $this->success($res['message'],U('Admin/Goods/goodsLists'));die;
            }else{
                $this->error($res['message']);die;
            }

        }

       //1.获取所有分类数据
        $cateData=(new Data())->tree((new CategoryModel())->select(),'cname');
        //dd($cateData);die;
        //分配所有分类数据
        $this->assign('cateData',$cateData);
        //2.获取所有的品牌数据
        $brandData=((new BrandModel())->select());
        $this->assign('brandData',$brandData);
        $this->display();
    }

    //2.异步获取规格和属性的数据
    public function ajaxGetAttr(){
        if(IS_AJAX){
            $tid=I('post.tid');
            //根据tid在类型属性表获取对应的数据
            $attrData=(new TypeAttrModel())->where("tid={$tid}")->select();
            //echo json_encode($attrData);
            //将属性value转化成数组
            foreach($attrData as $k=>$v){
                $attrData[$k]['value']=explode('|',$v['value']);
            }
            //返回ajax
            //原生JSON_UNESCAPED_UNICODE
             echo  json_encode($attrData,JSON_UNESCAPED_UNICODE);
            //框架写法
            //$this->ajaxReturn($attrData);
        }else{
            $this->error('非法请求');
        }

    }

    //3.异步上传图片
    public function ajaxUpload(){
            $upload = new \Think\Upload();// 实例化上传类
            $upload->maxSize   =     3145728 ;// 设置附件上传大小
            $upload->exts      =     array('jpg', 'gif', 'png', 'jpeg');// 设置附件上传类型
            $upload->rootPath  =     './Uploads/'; // 设置附件上传根目录
            $upload->savePath  =     ''; // 设置附件上传（子）目录
            // 上传文件
            $info   =  current($upload->upload());
            //拼接路径
            $path= 'Uploads/'.$info['savepath'].$info['savename'];
            //返回异步
           //dd($path);
            echo $path;

    }

    //4.异步删除图片
    public function ajaxDelImg(){
        if(IS_AJAX){
            //2016-12-31/big_586751bf0ec91.jpg
            $path= $_POST['path'];
            //图片编辑处理，只删除了大图，需要全删
            //获得图片路径
            $dirName= dirname($path);
            //dd($dirName);die;
            $fileName = basename($path);
            //dd($fileName);
            //重组数组
            if($fileName=ltrim(strrchr($fileName,'_'),'_')){
                $arr[] = $dirName.'/'.$fileName;
                $arr[] = $dirName.'/'.'small_'.$fileName;
                $arr[] = $dirName.'/'.'medium_'.$fileName;
                $arr[] = $dirName.'/'.'big_'.$fileName;
                //dd($arr);die;
                //执行遍历删除
                foreach($arr as $v){
                    if (file_exists($v)){
                        //删除文件
                        unlink($v);
                    }
                }

            }
            //file_exists — 检查文件或目录是否存在
            if (file_exists($path)){
                    //删除文件
                    unlink($path);
            }
        }
    }

    //商品编辑方法
    public function edit(){
        //获得当前要编辑条的id
        $gid = I('get.gid');
        //3.1商品详情表的更新
        if(IS_POST){ //判断是否是post提交
            //实例化模型
            //dd($_POST);die;
            $goodsModel= new GoodsModel();
            //执行修改
            $res=$goodsModel->edit($gid);
            if($res['status']=='success'){
                $this->success($res['message'],U('Admin/Goods/goodsLists'));die;
            }else{
                $this->error($res['message']);die;
            }

        }

        //dd($gid);die;
        //1.获取所有分类数据
        $cateData=(new Data())->tree((new CategoryModel())->select(),'cname');
        //dd($cateData);die;
        //分配所有分类数据
        $this->assign('cateData',$cateData);

        //2.获取所有的品牌数据
        $brandData=((new BrandModel())->select());
        //分配数据
        $this->assign('brandData',$brandData);

        //3.获得旧数据，关联商品表和商品详情表
        //->join('think_work ON think_artist.id = think_work.artist_id')->select();
        $oldData= (new GoodsModel())->alias('g')->join('shop_goodsdetail gd on g.gid=gd.gid')->where("g.gid={$gid}")->find();
        //将big下表处理成数组
        $oldData['big']= explode(',',$oldData['big']);
        //dd($oldData);die;
        //分配数据
        $this->assign('oldData',$oldData);
        //dd($oldData);

        //4.根据类型tid获得类型属性表中的数据
        $attrData= (new TypeattrModel())->where("tid={$oldData['tid']} and type=0")->select();
        //4.1将属性value处理成数组
        foreach ($attrData as $k=>$v){
                $attrData[$k]['value'] = explode('|',$v['value']);
        }
        //dd($attrData);
        //分配数据
        $this->assign('attrData',$attrData);

        //4.2在商品属性表中获得当前编辑商品已经添加了的属性数据
        $hasData = (new GoodsAttrModel())->where("gid={$gid}")->getField('gtid,gtvalue');
        //分配数据
        //dd($hasData);
        $this->assign('hasData',$hasData);

        //4.3处理数据规格 将类型属性表和商品属性表进行关联

        $specData = (new TypeAttrModel())->alias('ta')->join('shop_goods_attr ga on ta.taid=ga.taid ')->where("ga.gid={$gid} and ta.type=1")->select();
        //4.4重组数据
        foreach($specData as $k=>$v){
            $specData[$k]['value']= explode('|',$v['value']);
        }
        //dd($specData);
        //分配数据
        $this->assign('specData',$specData);
        //加载模板
        $this->display();
    }

    //商品删除方法
    public function del(){
        $gid= I('get.gid');
        $oldgoodModel = new GoodsModel();
        $res = $oldgoodModel->del($gid);
        if($res['status']=='success'){
            $this->success($res['message']);die;
        }else{
            $this->error($res['message']);die;
        }
    }


}